Elastic Cloud Enterprise を AWS 環境にデプロイしてみた
こんにちは、藤本です。
このエントリは Elastic stack Advent Calendar 4日目の記事になります。
現地時間12/1に Elastic {ON} 2016 で発表された Elastic Cloud Enterprise のアルファ版がリリースされました。
Introducing Elastic Cloud Enterprise - Public Alpha
先日、Elastic Cloud Enterprise を紹介する記事をエントリしました。
【速報】Elastic Cloud Enterprise の Alpha版がリリースされました
本日は早速、AWS 環境に Elastic Cloud Enterprise をデプロイしてみました。
デプロイしてみた
環境
Elastic Cloud Enterprise はパブリッククラウド、プライベートクラウド、オンプレミスとプラットフォームを選ばず、構築することが可能です。今回は全ての Role を一台で持たせたシングル構成で AWS 環境にデプロイしてみました。Elastic Cloud Enterprise を利用する環境であれば、非冗長構成はほとんどないと思いますが、まずは使用感を確認したかったのでシングル構成でサクッと試してみました。
- OS : CentOS 7
- AMI : ami-6d1c2007
- インスタンスタイプ : m4.large
システム要件は下記ページをご参照ください。
OSセットアップ
AMI から展開した OS を Elastic Cloud Enterprise をインストールするためにセットアップします。この手順は全てのホストで必要な設定となります。
kernel、xfsprogs のアップデート
kernel、xfsprogs の最新バージョンをインストールします。
$ sudo yum -y update kernel xfsprogs : Installed: kernel.x86_64 0:3.10.0-327.36.3.el7 Dependency Installed: linux-firmware.noarch 0:20150904-43.git6ebf5d5.el7 Complete! # rpm -q kernel xfsprogs kernel-3.10.0-327.10.1.el7.x86_64 kernel-3.10.0-327.36.3.el7.x86_64 xfsprogs-3.2.2-2.el7.x86_64
Docker インストール
Elastic Stack は Docker Container にデプロイされますので、Docker をイントールします。バージョンは 1.11 が要件になっています。
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF $ sudo yum install -y docker-engine-1.11.2 : Installed: docker-engine.x86_64 0:1.11.2-1.el7.centos Dependency Installed: docker-engine-selinux.noarch 0:1.12.3-1.el7.centos libtool-ltdl.x86_64 0:2.4.2-21.el7_2 Complete!
OS 設定
OS設定を投入します。
$ sudo vi /etc/default/grub GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200 cgroup_enable=memory swapaccount=1" $ sudo grub2-mkconfig -o "$(readlink /etc/grub2.conf)" $ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf $ echo "* soft nofile 1024000 * hard nofile 1024000 * soft memlock unlimited * hard memlock unlimited ubuntu soft nofile 1024000 ubuntu hard nofile 1024000 ubuntu soft memlock unlimited ubuntu hard memlock unlimited root soft nofile 1024000 root hard nofile 1024000 root soft memlock unlimited" | sudo tee -a /etc/security/limits.conf $ cat << SETTINGS | sudo tee /etc/sysctl.d/70-cloudenterprise.conf net.ipv4.tcp_max_syn_backlog=65536 net.core.somaxconn=32768 net.core.netdev_max_backlog=32768 SETTINGS
SELINUX の無効化は必須ではありませんが、今回は無効にしました。
$ sudo setenforce 0
Docker 設定
Elastic Cloud Enterprise の Container が利用するディスク領域の確保や、docker プロセスのパラメータ設定を実施します。
$ echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf $ sudo service network restart $ sudo install -o $USER -g $USER -d -m 700 /mnt/data $ sudo install -d -m 700 /mnt/data/docker $ sudo mkdir /etc/systemd/system/docker.service.d $ echo "[Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -g /mnt/data/docker -s devicemapper --storage-opt dm.fs=xfs" | sudo tee -a /etc/systemd/system/docker.service.d/docker.conf $ sudo systemctl daemon-reload $ sudo systemctl start docker $ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. $ sudo usermod -aG docker $USER $ sudo reboot
ネットワーク設定
シングル構成の場合、最低限、下記ポートを開放する必要があります。
- ローカル端末から
- 12400/tcp : Web管理コンソールへのアクセス
- 12300/tcp : APIによるアクセス
- ホスト自身から
- 18000-20000/tcp : ZooKeeper へのアドバタイズ
- 12191-12301, 12898-12908, 13898-13908/tcp : ZooKeeper によるアクセス
今回はシングル構成なので必要ありませんが、Role 毎にホストを分ける場合、ホストを冗長構成とする場合、ホスト間で通信が発生するため、FW設定が必要となります。必要なFW設定に関してはこちらをご参照ください。
Elastic Cloud Enterprise のインストール
Elastic Cloud Enterprise のインストールはシェルを実行して、対話形式でパラメータを入力するだけでインストールできます。
設定キー | 説明 | デフォルト値 |
---|---|---|
Installation ID | ホストを識別するID | runner-XXXXXX ランダムな英数字 |
Public Hostname | 外部からアクセスするIPアドレス | |
Host IP | ホスト間でアクセスするIPアドレス | |
Availability Zone | ホストのグループ名 例えば、AWSのAZ毎にホスト同一グループに配置することで、プライマリシャードと、レプリカシャードをAZレベルで分散できます | ece-region-1a |
Capacity | Elastic Cloud Enterprise に割り当てるメモリ量(MB) | 8192 ホストリソースで変動 |
$ curl -L -O https://elastic.github.io/cloud/docs/cloud-enterprise/elastic-cloud-enterprise-installer.sh $ bash elastic-cloud-enterprise-installer.sh Unable to find image 'docker.elastic.co/cloud-enterprise/elastic-cloud-enterprise:1.0.0-alpha4' locally 1.0.0-alpha4: Pulling from cloud-enterprise/elastic-cloud-enterprise 3690ec4760f9: Pull complete e75fbff20467: Pull complete 27452c761733: Pull complete 9d462f6fefc4: Pull complete 5a6f258d5a07: Pull complete f7709a62228d: Pull complete 372c8e49d9d5: Pull complete b842b3af6efd: Pull complete 4ddb19818ffc: Pull complete 612cacd1b411: Pull complete 086709959c54: Pull complete 00b2f98d0080: Pull complete ed5129fa9e4e: Pull complete 87564a518edc: Pull complete 5d75c5546571: Pull complete 0128589694c7: Pull complete 4f5091b95107: Pull complete bf741c7a9a13: Pull complete Digest: sha256:5df0d9c7a0af8bd31790e92b46194b6a7fa88955bf8c0dd831cc03979bf2eed4 Status: Downloaded newer image for docker.elastic.co/cloud-enterprise/elastic-cloud-enterprise:1.0.0-alpha4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Elastic Cloud Enterprise Installer Start setting up a new Elastic Cloud Enterprise installation by installing the software on your first host. This first host becomes the initial coordinator and provides access to the Cloud UI, where you can manage your installation. To learn more about the options you can specify, see the documentation. NOTE: If you want to add this host to an existing installation, please specify the --coordinator-host flag ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Please supply the following configuration details -- Installation ID: [runner-9JEW0I] Public Hostname: 172.31.5.78 Host IP: 172.31.5.78 Availability Zone: [ece-region-1a] Capacity: [8192] -- All configuration details have been supplied -- -- Verifying Prerequisites -- Checking host storage path... PASSED Checking docker version... PASSED Checking internal hostname connectivity... PASSED Checking internal ip connectivity... PASSED Checking OS settings... PASSED -- Completed Verifying Prerequisites -- - Running Bootstrap container - Monitoring bootstrap process - Loaded bootstrap settings - Starting local runner - Started local runner - Waiting for runner container node - Runner container node detected - Waiting for coordinator candidate - Detected coordinator candidate - Detected pending coordinator, promoting coordinator - Coordinator accepted - Storing current platform version: 1.0.0-alpha4 - Storing Elastic Stack versions: [2.4.1,5.0.2] - Creating Admin Console Elasticsearch backend - Applying Elasticsearch index template - Updating dynamic Admin Console settings with Elasticsearch cluster information - Starting reindexing Admin Console data - Shutting down bootstrapper - Exiting bootstrapper ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Elastic Cloud Enterprise Installer Completed Successfully Administration Console Details: URL: http://54.197.xxx.xxx:12400 (See documentation for HTTPS details) Username: root Password: I74S7Cp9n43NVL1fL19Kq0MjiFsoKCdHgmTlYYhlSwc= To add hosts to this Elastic Cloud Enterprise installation, include the following parameter when you install the software on additional hosts: --coordinator-host 172.31.5.78 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
成功すると、上記が出力されます。
記載されている URL へアクセスします。
ログイン画面が表示されました。Kibana の X-Pack のログイン画面にソックリですね。同じく記載されているユーザー名、パスワードでログインします。使用許諾契約書が表示されます。
使用許諾契約書を Accept します。
ログインが完了すると、Elasticsarch クラスタが表示されます。Kibana 5系の UI に似ていますね。
Elastic Cloud Enterprise の画面説明
詳細な設定は別の機会に説明するとして、今回はメニューレベルで説明します。
メニュー
Kibana 同様、左ペインにメニューがあります。 上から、Elasticsearch/Kibanaクラスタ管理、Elastic Cloud基盤管理、設定履歴、ログアウト、メニューの開閉となります。
Elasticsearch / Kibana クラスタ管理
Elasticsearch クラスタの作成、設定、Kibana クラスタの設定を行います。
Elasticsarch クラスタ管理
Elasticsearch クラスタの一覧が表示されます。デプロイ時点で Elastic Cloud Enterprise の設定情報を管理する Elasticsearch クラスタが生成されています。
Kibana クラスタ管理
Elasticsearch クラスタにおいて Kibana を有効化したクラスタが表示されます。デプロイ時点では Kibana はありません。
Elastic Cloud 基盤管理
リージョン管理
Elastic Cloud 基盤のリージョンが表示されます。 Allocator を割り当てているホスト数、Proxy を割り当てているホスト数が表示されます。今回はシングル構成で一つのホストに Allocator、Proxy の両方が割り当てられています。
設定履歴
設定履歴を表示できます。
Elasticsearch クラスタを作成する
Elasticsearch / Kibana クラスタ管理から [ Create Cluster ] をクリックします。
設定画面で設定項目を入力します。
設定キー | 説明 |
---|---|
Cluster name | クラスタを識別する名前 |
Elasticsearch version | 作成する Elasticsearch のバージョンを指定します。 現時点では「5.0.2」「2.4.1」のいずれかを選択できます。 Elastic Cloud 基盤管理から Docker Image 情報を追加することで追加できそうです。 |
Foult tolerance | シングル構成なので分かりませんが、拠点数を選択できます |
Node count | Elasticsarch Node 数を選択できます。 Docker container 数になります。 Proxy からルーティング、負荷分散されます。 |
Dedicated master-eligibl nodes | Data Node、Master Node を分ける場合、有効化します。 |
Plugins | インストールするプラグインを選択します。 現在表示されているプラグインだけではなく、 Elastic Cloud 基盤管理からプラグインを追加することができます。 |
設定キー | 説明 |
---|---|
Scripting | Inline Scriptsの有効/無効を設定できます。 Stored Scriptsの有効/無効を設定できます。 File Scriptsの有効/無効を設定できます。 |
Automatic index creation | 存在しないインデックへのドキュメントのインデキシング時にインデックスの作成を許可するか設定できます。 |
Deletion requires name | ワイルドカード指定によるインデックスの削除を許可するか設定できます。 |
[ Create Cluster ] をクリックすると、クラスタの作成が開始されます。
5分ほどで作成が完了しました。画面上部に表示されているユーザー名、パスワードは X-Pack の Security のユーザー情報となりますので控えておいてください。Elasticsearch Web API にベーシック認証によりアクセスする際に必要となります。
Show Detail からログを確認して、Plan successfully constructed が出力されていれば、作成成功です。
非常に簡単に作成できました。
Elasticsearch クラスタへアクセスする
Elastic Cloud Enterprise の推奨構成は LoadBalancer を介した Proxy へのアクセスです。 今回は分かりやすさを優先して、直接 Proxy へアクセスしています。
Elasticsearch クラスタ一覧に作成した「ece-test」が表示されています。リンクをクリックして詳細設定画面に遷移します。
Endpoints のリンクが Elasticsearch クラスタへのアクセス URL となります。エンドポイントの URL は Proxy を通して 2台の Node へアクセスされます。
それではアクセスしてみます。エンドポイントの URL へ控えておいたユーザー情報をベーシック認証に指定し、アクセスします。
$ curl -k -u elastic https://99c9ec9d59a5435a8e1e62f22df5c821.172.31.5.78.xip.io:9243/ Enter host password for user 'elastic': { "name" : "instance-0000000001", "cluster_name" : "99c9ec9d59a5435a8e1e62f22df5c821", "cluster_uuid" : "8KGhh5ABR2OQ6Ym7abShaQ", "version" : { "number" : "5.0.2", "build_hash" : "f6b4951", "build_date" : "2016-11-24T10:07:18.101Z", "build_snapshot" : false, "lucene_version" : "6.2.1" }, "tagline" : "You Know, for Search" }
アクセスできました。
プラグインにも選択した analysis-icu、および analysis-kuromoji がインストールされています。
$ curl -k -u elastic https://99c9ec9d59a5435a8e1e62f22df5c821.172.31.5.78.xip.io:9243/_cat/plugins Enter host password for user 'elastic': instance-0000000001 analysis-icu 5.0.2 instance-0000000001 analysis-kuromoji 5.0.2 instance-0000000001 found-elasticsearch 5.0.2 instance-0000000001 repository-s3 5.0.2 instance-0000000001 x-pack 5.0.2 instance-0000000000 analysis-icu 5.0.2 instance-0000000000 analysis-kuromoji 5.0.2 instance-0000000000 found-elasticsearch 5.0.2 instance-0000000000 repository-s3 5.0.2 instance-0000000000 x-pack 5.0.2
Kibana クラスタを作成し、アクセスする
Elastic Cloud Enterprise の推奨構成は LoadBalancer を介した Proxy へのアクセスです。 今回は分かりやすさを優先して、直接 Proxy へアクセスしています。
Elasticsearch クラスタはデフォルトで Kibana を利用できません。Kibana を利用するには Kibana を有効化する必要があります。
Elasticsearch クラスタの詳細画面から「Manage」ページへ遷移します。
Kibana を Enable から有効化します。
有効化されると、[ Go to Kibana ] のリンクが表示されます。[ Go to Kibana ] のリンクが Kibana クラスタへのアクセス URL となります。
Kibana のエンドポイント(Proxy)はプライベートIPアドレスで払い出されます。Proxy からクラスタへは名前ベースでルーティングしているため、インターネットからアクセスしたい場合、今回は /etc/hosts にエンドポイントで Proxy へアクセスするように設定しました。
エンドポイントへアクセスします。
Kibana の X-Pack のログイン画面が表示されました。
Elasticsearch のユーザー名、パスワードでログインできます。
ログインが成功し、Kibana の UI が表示されました。
まとめ
いかがでしたでしょうか?
Elastic Cloud Enterprise のデプロイも、Elasticsearch クラスタのデプロイも非常に簡単にできました。まだ簡単な操作しかしていませんが、今度はホストレベルの冗長化構成を試してみたいと思います。また試してみたエントリします。